﻿/*
 * IFileLogger.h
 *
 *  Created on: 26.08.2012
 *      Author: caffeine
 */

#ifndef IFILELOGGER_H_
#define IFILELOGGER_H_

#include "irrlicht.h"
#include "Log.h"
#include <thread/IThread.h>
#include <StringUtils.h>

namespace irr {
namespace log {


/***
 * Описание версий протокола:
 *
 * Версия #1
 * Каждая лог-запись отдельный цикл записи. Одна запись имеет соелнедующую структуру:
 * irr::u32 идентификатор потока из которого произвелась записи
 * irr::u32 количество символов в имяни файла, откуда произвелась запись
 * char* имя файла
 * irr::u32 количество символов в имяни vtnjlf, откуда произвелась запись
 * char* название метода
 * irr::u32 строка, на которой происходит вывод
 * irr::u8 тип записи (см. ниже)
 * irr::u32 количество символов в записи
 * char* текст записи
 *
 * Тип записи:
 * 0 irr::ELL_INFORMATION
 * 1 irr::ELL_WARNING
 * 2 irr::ELL_ERROR
 * 3 irr::ELL_NONE
 */

class IFileLogger: public irr::IReferenceCounted {
private:
	irr::io::IFileSystem*fileSystem;
	irr::core::stringc ext;
	irr::core::stringc fileName;
	bool usinThreadIDINFileName;
	bool binaryFormat;
	
	static void LOG_FUNC(irr::thread::ThreadID current_thread,char*text,irr::ELOG_LEVEL log,const char*filename,const char*function,irr::u32 line,void*this_pointer);
public:
	IFileLogger(irr::io::IFileSystem*fs);
	virtual ~IFileLogger();
	void add(irr::thread::ThreadID current_thread,char*text,irr::ELOG_LEVEL,const char*filename,const char*function,irr::u32 line);
	void setUsinThreadIDINFileName(bool a);
	bool isUsinThreadIDINFileName();
	void setThisAsDefaultLogger();

	/***
	* Возвращяет версию протокола, в которой логгер будет записывать логи на диск
	*
	* @return версия, в которой будут вестись записи логов
	*/
	static irr::u32 getProtocolVersion();
};

} /* namespace log */
} /* namespace irr */
#endif /* IFILELOGGER_H_ */
